/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.com.gestionstock.controleur;

import edu.com.gestionstock.bean.Livres;
import edu.com.gestionstock.bean.Dvd;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//import java.awt.event.WindowAdapter;
//import java.awt.event.WindowEvent;
//import javax.swing.JOptionPane;
import javax.swing.JTextField;

//import java.sql.SQLException;
import java.util.ArrayList;


import edu.com.gestionstock.dao.DAO;
import edu.com.gestionstock.dao.bo.DvdDAO;
import edu.com.gestionstock.dao.bo.LivresDAO;
import edu.com.gestionstock.vue.PanneauRecherche;
import javax.swing.JComboBox;

//import java.awt.BorderLayout;
/**
 *
 * @author Gratien
 */
public class ControleurRechercheStock implements ActionListener
{

    private PanneauRecherche rechercheStock;
    private ControleurAfficheStock afficheStock;
    private Dvd dvd = new Dvd();
    private Livres livre = new Livres();

    public ControleurRechercheStock(PanneauRecherche recherche, ControleurAfficheStock affiche)
    {
        this.rechercheStock = recherche;
        this.afficheStock = affiche;
        setControleurFenetre(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();

        //Recherche Stock
        if ( source == rechercheStock.getJButtonAnnuler() )
        {
            this.reinitialiseFormulaire();
        }

        if ( source == rechercheStock.getJButtonRecherche() )
        {
            //Récupération des données qui ont été saisies
            JTextField acteur = rechercheStock.getJTextFieldActeur();
            JTextField titre = rechercheStock.getJTextFieldTitre();
            JTextField realisateur = rechercheStock.getJTextFieldRealisateur();
            JTextField id = rechercheStock.getJTextFieldId();
            String genre = rechercheStock.getJComboBoxGenre().getSelectedItem().toString();
            String type = rechercheStock.getJComboBoxType().getSelectedItem().toString();

            //Affichage de test
            //JOptionPane.showMessageDialog(null, acteur.getText() + "\n" + titre.getText() + "\n" + "RCH STOCK\n");

            //On set les données dans les objets Livres et Dvd
            dvd.setRealisateur(realisateur.getText());
            dvd.setActeurs(acteur.getText());
            dvd.setTitre(titre.getText());
            dvd.setGenre(genre);

            livre.setAuteur(realisateur.getText());
            livre.setTitre(titre.getText());
            livre.setGenre(genre);

            //On créer les objets DAO
            DAO<Dvd> DvdDao = new DvdDAO();
            ArrayList<Dvd> arrDvd = new ArrayList<Dvd>();

            DAO<Livres> LvDao = new LivresDAO();
            ArrayList<Livres> arrLivre = new ArrayList<Livres>();

            //Si on a fait une recherche sur l'ID alors il ne doit donner qu'un seul resultat, on utilise donc la method fin()
            if ( !id.getText().isEmpty() )
            {
                System.out.println("Recherche sur ID");
                //Je ne fais le set que maintenant, sinon c'est que id n'a pas de valeur et donc pas d'interet de faire le set
                dvd.setId(Integer.parseInt(id.getText()));
                livre.setId(Integer.parseInt(id.getText()));

                dvd = DvdDao.find(dvd.getId());
                //On vérifie si l'objet retourné n'est pas vide, et on l'ajoute à l'arraylist
                if ( dvd.getTitre() != null )
                {
                    arrDvd.add(dvd);
                }
                livre = LvDao.find(livre.getId());
                if ( livre.getTitre() != null )
                {
                    arrLivre.add(livre);
                }
            }
            else
            {
                System.out.println("Recherche sur champ texte");
                //Sinon on fait une recherche sur les autres champs, donc plusieurs resultats possible
                //On utilise la methode DAO pour recupérer les listes de Dvd et Livres qui correspondent aux criteres de recherche       
                arrDvd = DvdDao.findList(dvd);
                arrLivre = LvDao.findList(livre);

                //TODO: Il y a actuellement une erreur avec la DAO lorsqu'il n'y a qu'un seul param (titre ou realisateur) d'introduit
            }

            //On masque le panneau de recherche
            rechercheStock.setVisible(false);

            //On vide le tableau d'affichage
            afficheStock.videStock();

            //On envoit les listes au panneau affiche stock
            afficheStock.afficheStock(arrLivre, arrDvd);

            //On affiche le panneau de resultat
            afficheStock.setStockVisible(true);

            //On vide les champs du panneau recherche pour la recherche suivante
            this.reinitialiseFormulaire();
        }

    }

    public void setControleurFenetre(ActionListener listener)
    {
        rechercheStock.getJButtonAnnuler().addActionListener(listener);
        rechercheStock.getJButtonRecherche().addActionListener(listener);

    }

    public void reinitialiseFormulaire()
    {
        this.rechercheStock.setjTextFieldTitre(null); //@Yves
        this.rechercheStock.setjTextFieldActeur(null); //@Yves
        this.rechercheStock.setjTextFieldId(null);
        this.rechercheStock.setjTextFieldRealisateur(null);
        this.rechercheStock.getJComboBoxGenre().setSelectedIndex(0);
        this.rechercheStock.getJComboBoxType().setSelectedIndex(0);
    }
}
